// 一个长度为n-1的递增排序数组中的所有数字都是唯一的，并且每个数字都在范围0～n-1之内。
// 在范围0～n-1内的n个数字中有且只有一个数字不在该数组中，请找出这个数字。

// 示例 1:
// 输入: [0,1,3]
// 输出: 2

// 示例 2:
// 输入: [0,1,2,3,4,5,6,7,9]
// 输出: 8

// 来源：力扣（LeetCode）
// 链接：https://leetcode.cn/problems/que-shi-de-shu-zi-lcof
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

// 一看到排序数组，应该第一反应就是用二分查找，这样可以把时间复杂度减少到O(logN)
// 要让时间复杂度低一点需要用到二分法  常规遍历方法时间复杂度为N
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function (nums) {
  let left = 0;
  let right = nums.length - 1;
  while (left <= right) {
    let mid = left + Math.floor((right - left) / 2);
    // 当mid等于mid位置上的数字时 说明左半边没有缺数字 缺的再右半边
    if (mid != nums[mid]) {
      right = mid - 1;
    } else {
      // 当mid不等于mid位置上的数字时 说明左半边缺数字了
      left = mid + 1;
    }
  }
  // 最后找到的left就是缺失的那个数字的左边一个数字
  return left;
};

console.log(missingNumber([0, 1, 2, 3, 4, 5, 6, 7, 9]));
